package graficar;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;

public class GraficoTerminalInterna extends Canvas {
	
	String id;
	double x;
	double y;
	double tamX;
	double tamY;
	
	final static double VARIACION_X=0.035;
	final static double VARIACION_Y=0.035;
	
	public GraficoTerminalInterna(){
	
	}
	
	public GraficoTerminalInterna(String id){
		this.id=id;
	}
	
	public GraficoTerminalInterna(double x, double y, double tamX, double tamY){
		this.x=x;
		this.y=y;
		this.tamX=tamX;
		this.tamY=tamY;
	}
	
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public int getX() {
		return (int) x;
	}

	public int getY() {
		return (int)y;
	}

	public double getTamX() {
		return tamX;
	}

	public double getTamY() {
		return tamY;
	}

	
	public void setTi(ArrayList<GraficoConmutadorInterno> lisCi, ArrayList<GraficoElipse> lisEli, Diagrama lienzo){
		double minX;
		double minY;
		double radX;
		double radY;
		double ancho = lienzo.getWidth();
		double alto = lienzo.getHeight();
		ArrayList<GraficoTerminalInterna> auxLis = new ArrayList<GraficoTerminalInterna>();
				
		for(int i=0; i<lisCi.size();i++){
			for(int j=0; j<lisEli.size();j++){
				if(lisCi.get(i).id.equals(lisEli.get(j).id)){
					for(int k=0;k<lisCi.get(i).getTi().size();k++){
						minX=Math.random()*(lisEli.get(j).eliAux.getMaxX() - lisEli.get(j).eliAux.getX()+1)+lisEli.get(j).eliAux.getX();
						minY=Math.random()*(lisEli.get(j).eliAux.getMaxY() - (lisEli.get(j).eliAux.getY())+1)+(lisEli.get(j).eliAux.getY());
						radX = 10;// ((ancho*VARIACION_X) * lisCi.get(i).getTi().size());
						radY = 10;//((alto*VARIACION_Y) * lisCi.get(i).getTi().size());
						if(lisEli.get(j).eliAux.contains(new Rectangle2D.Double(minX,minY,radX,radY)) &&
								noSeIntersecta(new GraficoTerminalInterna(minX, minY, radX, radY), auxLis)){
							lisCi.get(i).getTi().get(k).x=minX;
							lisCi.get(i).getTi().get(k).y=minY;
							lisCi.get(i).getTi().get(k).tamX=radX;
							lisCi.get(i).getTi().get(k).tamY=radY;
							auxLis.add(new GraficoTerminalInterna(minX, minY, radX, radY));
						}
						else{
							k-=1;
						}
					}
				}
			}
		}
		
	}
	
	public Boolean noSeIntersecta(GraficoTerminalInterna ti, ArrayList<GraficoTerminalInterna> listTi){
		for(int i=0; i<listTi.size();i++){
			if(new Rectangle2D.Double(ti.x,ti.y,ti.tamX,ti.tamY).intersects(new Rectangle2D.Double(listTi.get(i).x,listTi.get(i).y,listTi.get(i).tamX,listTi.get(i).tamY)))
				return false;
		}
		
		return true;
	}
	
	public void paint(Graphics g, ArrayList<GraficoConmutadorInterno> ci){
		
		Graphics2D g2d = (Graphics2D) g;
		
		for(int i=0;i<ci.size();i++){
			if(!(ci.get(i).getTi().isEmpty())){
				for(int j=0; j<ci.get(i).getTi().size();j++){
				
					g2d.drawString(ci.get(i).getTi().get(j).id, (float) ci.get(i).getTi().get(j).x, (float) ci.get(i).getTi().get(j).y);
				
				}
			}
			
		}
		
	}

}
